package com.ysq.www.api.work.controller;


import com.alibaba.druid.util.StringUtils;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.ysq.www.api.work.entity.Official;
import com.ysq.www.api.work.service.IOfficialService;
import com.ysq.www.common.annotation.AuthToken;
import com.ysq.www.common.result.ResultMsg;
import com.ysq.www.common.utils.Comm;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 * 公文表 前端控制器
 * </p>
 *
 * @author dql
 * @since 2020-08-11
 */
@RestController
@RequestMapping("/work/official")
public class OfficialController {

    @Autowired
    private IOfficialService officialService;

    /**
     * 查询已发起公文拟稿详情
     * @param oId 公文id
     * @return ResultMsg
     */
    @GetMapping("/detail")
    @AuthToken
    public ResultMsg selectDetailById(Integer oId){
        Official official = officialService.selectDetailById(oId);
        return ResultMsg.SUCCESS.setNewMsg("查询成功").setNewData(official);
    }

    /**
     * 查询待处理/已处理/抄送公文拟稿详情
     * @param oId 公文id
     * @return ResultMsg
     */
    @GetMapping("/untreated")
    @AuthToken
    public ResultMsg selectUntreatedById(Integer oId){
        Official off = officialService.selectUntreatedById(oId);
        return ResultMsg.SUCCESS.setNewMsg("查询成功").setNewData(off);
    }


    /**
     * 提交公文拟稿
     * @param official 公文表实体对象
     * @return ResultMsg
     */
    @PostMapping("/draft")
    @AuthToken
    public ResultMsg addOfficial(@RequestBody Official official){
        ResultMsg rm = officialService.addOfficial(official);
        return rm;
    }

    /**
     * 分页查询我发起的公文拟稿
     * @param userId 发起人用户ID
     * @param pageNumber 页码
     * @param pageSize 页大小
     * @param time 日期
     * @return ResultMsg
     */
    @GetMapping("/sponsor")
    @AuthToken
    public ResultMsg selectSponsorById(Integer userId,Integer pageNumber,Integer pageSize,String time){
        //if (StringUtils.isEmpty(time)) time = Comm.getSysDate(7);
        IPage<Official> oPage = officialService.selectSponsorById(userId,pageNumber,pageSize,time);
        return ResultMsg.SUCCESS.setNewMsg("查询成功").setNewData(oPage);
    }

    /**
     * 分页查询待处理/已处理公文拟稿
     * @param userId 用户id（审批者id）
     * @param type 类型：0未处理，1已处理
     * @param pageNumber 页码
     * @param pageSize 页大小
     * @param time 日期
     * @return ResultMsg
     */
    @GetMapping("/pending")
    @AuthToken
    public ResultMsg selectPendingById(Integer userId,Integer type,Integer pageNumber,Integer pageSize,String time){
        if (userId == null || type == null) return ResultMsg.ARGS_ERROR;
        //if (StringUtils.isEmpty(time)) time = Comm.getSysDate(7);
        IPage<Official> oPage = officialService.selectPendingById(userId,type,pageNumber,pageSize,time);
        return ResultMsg.SUCCESS.setNewMsg("查询成功").setNewData(oPage);
    }

    /**
     * 分页查询抄送至我的公文拟稿
     * @param userId 用户ID
     * @param pageNumber 页码
     * @param pageSize 页大小
     * @param time 日期
     * @return ResultMsg
     */
    @GetMapping("/copyTo")
    @AuthToken
    public ResultMsg selectCopyToMeById(Integer userId,Integer pageNumber,Integer pageSize,String time){
        //if (StringUtils.isEmpty(time)) time = Comm.getSysDate(7);
        IPage<Official> oPage = officialService.selectCopyToMeById(userId,pageNumber,pageSize,time);
        if (oPage == null) return ResultMsg.SUCCESS.setNewMsg("查询成功,数据为空");
        return ResultMsg.SUCCESS.setNewMsg("查询成功").setNewData(oPage);
    }


    /**
     * 处理公文拟稿
     * @param oId 公文id
     * @param result 处理结果：1通过，2驳回
     * @return ResultMsg
     */
    @GetMapping("/dispose")
    @AuthToken
    public ResultMsg disposeOfficialById(Integer oId,Integer result){
        ResultMsg rm = officialService.disposeOfficialById(oId,result);
        return rm;
    }

    /**
     * 撤销公文拟稿
     * @param oId 公文id
     * @return ResultMsg
     */
    @GetMapping("/repeal")
    @AuthToken
    public ResultMsg repealOfficialById(Integer oId){
        ResultMsg rm = officialService.repealOfficialById(oId);
        return rm;
    }

}
